package com.yw.thesimpllestplayer.mediaplayer.decoder;

import android.media.MediaFormat;

/**
 * @ProjectName: TheSimpllestplayer
 * @Package: com.yw.thesimpllestplayer.mediaplayer.decoder
 * @ClassName: IDecoder
 * @Description: 解码器接口
 * @Author: wei.yang
 * @CreateDate: 2021/11/6 10:20
 * @UpdateUser: 更新者：wei.yang
 * @UpdateDate: 2021/11/6 10:20
 * @UpdateRemark: 更新说明：
 * @Version: 1.0
 */
public interface IDecoder extends Runnable {
    /**
     * 暂停解码
     */
    void pause();

    /**
     * 继续解码
     */
    void goOn();

    /**
     * 跳转到指定位置
     *
     * @param pos 毫秒
     * @return 实际时间戳单位毫秒
     */
    long seekTo(long pos);

    /**
     * 跳转到指定位置并播放
     *
     * @param pos 单位毫秒
     * @return 实际时间戳 单位毫秒
     */
    long seekAndPlay(long pos);

    /**
     * 停止解码
     */
    void stop();

    /**
     * 是否正在解码
     *
     * @return true是，false否
     */
    boolean isDecoding();

    /**
     * 是否正在快进
     *
     * @return
     */
    boolean isSeeking();

    /**
     * 是否已经停止了解码
     *
     * @return
     */
    boolean isStop();

    /**
     * 获取视频的宽度
     *
     * @return
     */
    int getWidth();

    /**
     * 获取视频的高度
     *
     * @return
     */
    int getHeight();

    /**
     * 获取视频时长
     *
     * @return
     */
    long getDuration();

    /**
     * 获取当前时间戳 单位毫秒
     *
     * @return
     */
    long getCurTimeStamp();

    /**
     * 获取视频旋转角度
     *
     * @return
     */
    int getRotationAngle();

    /**
     * 获取音视频对应的格式参数
     *
     * @return
     */
    MediaFormat getMediaFormat();

    /**
     * 获取音视频对应的媒体轨道
     *
     * @return
     */
    int getTrack();

    /**
     * 获取解码文件路径
     *
     * @return
     */
    String getFilePath();

    /**
     * 无需音视频同步
     */
    IDecoder withoutSync();
    /**
     * 设置尺寸监听器
     */
    void setSizeListener(IDecoderProgress iDecoderProgress);

    /**
     * 设置状态监听器
     */
    void setStateListener(IDecoderStateListener iDecoderStateListener);
}
